// Copyright (c) 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef QUICHE_QUIC_QBONE_PLATFORM_MOCK_KERNEL_H_
#define QUICHE_QUIC_QBONE_PLATFORM_MOCK_KERNEL_H_

#include "quic/platform/api/quic_test.h"
#include "quic/qbone/platform/kernel_interface.h"

namespace quic {

class MockKernel : public KernelInterface {
 public:
  MockKernel() {}

  MOCK_METHOD(int,
              bind,
              (int fd, const struct sockaddr*, socklen_t addr_len),
              (override));
  MOCK_METHOD(int, close, (int fd), (override));
  MOCK_METHOD(int, ioctl, (int fd, int request, void*), (override));
  MOCK_METHOD(int, open, (const char*, int flags), (override));
  MOCK_METHOD(ssize_t, read, (int fd, void*, size_t count), (override));
  MOCK_METHOD(
      ssize_t,
      recvfrom,
      (int sockfd, void*, size_t len, int flags, struct sockaddr*, socklen_t*),
      (override));
  MOCK_METHOD(ssize_t,
              sendmsg,
              (int sockfd, const struct msghdr*, int flags),
              (override));
  MOCK_METHOD(ssize_t,
              sendto,
              (int sockfd,
               const void*,
               size_t len,
               int flags,
               const struct sockaddr*,
               socklen_t addrlen),
              (override));
  MOCK_METHOD(int, socket, (int domain, int type, int protocol), (override));
  MOCK_METHOD(int,
              setsockopt,
              (int, int, int, const void*, socklen_t),
              (override));
  MOCK_METHOD(ssize_t, write, (int fd, const void*, size_t count), (override));
};

}  // namespace quic

#endif  // QUICHE_QUIC_QBONE_PLATFORM_MOCK_KERNEL_H_
